package Q19;

/**
 * 删除链表的的倒数第N个结点
 *
 * @author 23737
 * @time 2021.12.3
 */
public class test {
    public static void main(String[] args) {
        ListNode listNode = new ListNode(1);
        ListNode listNode2 = new ListNode(2);
        ListNode listNode3 = new ListNode(3);
        ListNode listNode4 = new ListNode(4);
        ListNode listNode5 = new ListNode(5);
        listNode.next = listNode2;
        listNode2.next = listNode3;
        listNode3.next = listNode4;
        listNode4.next = listNode5;
        ListNode listNode1 = new Solution().removeNthFromEnd(listNode, 2);
        while(listNode1!=null){
            System.out.println(listNode1.val);
            listNode1 = listNode1.next;
        }
    }
}


class ListNode {

    int val;

    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }

}


/**
 * 快慢指针
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode listNode = new ListNode(0);
        listNode.next = head;
        ListNode slow = listNode;
        ListNode fast = listNode;
        while(n > 0){
            n--;
            fast = fast.next;
        }
        ListNode res = listNode;
        while(fast != null){
            res = slow;
            slow = slow.next;
            fast = fast.next;
        }
        res.next = slow.next;
//        slow.next = null;
        return listNode.next;
    }
}
